package org.flowers.unbeaten.util;

import org.apache.shiro.crypto.hash.Sha1Hash;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.flowers.unbeaten.base.constant.Constants;

/**
 * @description 密码工具类
 * @author RyanWang
 * @date 2021-08-03 14:17:18
 * @version 1.0
 */
public class PasswordUtils {

    public static String sha256(String password, String salt) {
        return new SimpleHash(Constants.HASH_ALGORITHM_NAME, password, salt, Constants.HASH_ITERATIONS).toString();
    }

    /**
     * 生成安全的密码，生成随机的9位salt并经过XX次 sha-1 hash
     * @param password 明文密码
     * @param salt 盐
     * @return
     */
    public static String encodePassword(String password, String salt) {
        String plain = Encodes.unescapeHtml(password);
        String hashedPassword = new Sha1Hash(plain, salt, Constants.HASH_ITERATIONS).toHex();
        return hashedPassword;
    }

    /**
     * 生成安全的密码，生成随机的9位salt并经过XX次 sha-1 hash
     * @param password 明文密码
     * @return
     */
    public static String encodePassword(String password) {
        String salt = Token.createSalt(Constants.SALT_SIZE);
        String plain = Encodes.unescapeHtml(password);
        return encodePassword(plain, salt);
    }

    /**
     * 验证密码
     * @param password 明文密码
     * @param encodePassword 加密密码
     * @param salt 盐
     * @return 验证成功返回true
     */
    public static boolean validatePassword(String password, String encodePassword, String salt) {
        String plain = Encodes.unescapeHtml(password);
        String hashedPassword = new Sha1Hash(plain, salt, Constants.HASH_ITERATIONS).toHex();
        return encodePassword.equals(hashedPassword);
    }

}
